跳到主要内容

Cloudflare Tunnel 内网穿透

本文介绍了通过 Cloudflare Tunnel 内网穿透,实现不同子域名映射到本地不同端口,配置 ssh 通道远程连接目标机器。

操作环境:Windows10 专业版,文中 Cloudflare 简称为 cf

域名托管

需要将域名托管到 cf 进行解析,如果托管的是顶级域名,例如 xxx.com 那么理论上可以配置无限多个子域名来映射到本地不同端口。 如果托管的是子域名,例如 api.xxx.com 那么就只能使用这个一个子域名映射一个端口了,也可以通过映射不同的路径来区分不同服务,但没有顶级域名方便。

部署通道

部署通道非常简单,按照网页中的提示执行傻瓜式操作就行了

  1. cf 控制面板 的左下角找到 联网 - 通道(tunnel),进入tunnel页面;
  2. 创建一个通道,并点击进入创建的通道;
  3. 之后按照提示去指定页面下载适合自己系统的 cloudflared 程序;
  4. 按照提示执行程序,使用管理员权限执行网页中提供的命令;

1775730195059

  1. 按照页面操作完成之后,页面会显示已连接;

配置路由

成功连接之后,我们需要添加路由,来决定哪个域名或者哪个路径对应本地的哪个服务。

  1. 点击添加路由,选择“已发布应用程序”;
  2. 填写子域名和本地服务地址,注意本地服务地址需要填http,而不是https,之后直接点击添加路由即可;

1775730410659

之后就能通过该子域名直接访问本地服务了,内网穿透成功!

服务管理

以上操作成功之后,Windows上会被添加一个 cloudflared 服务,用于处理通道 1775731109322 如果发现过一段时间发现服务在运行,但无法连接,可尝试以下命令

# 停止服务
sc stop cloudflared

# 启动服务
sc start cloudflared

# 查看服务状态
sc query cloudflared

更换通道

如果想要在cf上创建新的通道,然后在本地执行命令,安装通道服务,需要先卸载之前的服务,之后再执行新通道提供的服务安装命令。

# 卸载通道服务
cloudflared service uninstall

SSH 穿透

安装 ssh server

服务需要安装ssh server,这里以Windows为例,以管理员身份运行 powershell,通过下面的命令检查或安装 ssh server

# 检查 ssh server 是否已安装
Get-Service sshd

# 安装 ssh server
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0

# 启动 ssh srver
Start-Service sshd

# 设置开机自启
Set-Service -Name sshd -StartupType 'Automatic'

1775732589275

web ssh

本地安装好 ssh server 之后,可以在 cf 中配置 ssh 路由,之后添加访问应用程序实现网页端 ssh,具体步骤如下。

在通道中添加路由,步骤同上,之后填写子域名,例如 ssh,之后服务 url 填 tcp://localhost:22。

进入 cf 的 zero trust 页面,点击访问控制,应用程序,之后创建一个子托管应用程序,

如下图,填写应用程序名称,例如 ssh,

会话持续时间可以选一个月,这样只需要一个月验证一次,

添加公共主机名 ssh.xxx.com

浏览器呈现设置中,激活 Cloudflared 身份验证,浏览器呈现选择 SSH,

1775791200732

之后在访问策略选项中,点击创建新策略,按照下图配置,使用邮箱验证码进行验证,这里实测qq邮箱收不到验证码,outlook 邮箱可以。

1775791353472

之后点击下一步,后面的页面都直接点击下一步,完成即可。

至此,访问 ssh 对应的子域名,完成邮箱验证,就会出现用户名密码验证,通过之后就能在浏览器中使用 ssh 了。

xshell ssh

也可以配置 xshell 连接,步骤如下。

首先确保系统已有 cloudflared,之后在控制台中执行以下命令来启动一个 tcp 本地代理,代理到上面已经配置好的 ssh 子域名。

cloudflared access tcp --hostname ssh.xxx.com --url localhost:2022

在 xshell 的连接配置中,配置主机名和端口,127.0.0.1:2022,

之后配置用户名和密码,点击连接,

之后浏览器会跳出 cf 的认证页面,认证通过后即可成功连接 xshell,

实测响应速度和浏览器中的 ssh 没有区别,在国内使用都是卡顿的,这可能和 cf 服务器的距离有关。

Loading Comments...